home *** CD-ROM | disk | FTP | other *** search
/ CU Amiga Super CD-ROM 27 / CU Amiga Magazine's Super CD-ROM 27 (1998)(EMAP Images)(GB)[!][issue 1998-10].iso / CUCD / Programming / JForth / JTools / Demos / Fibonacci < prev    next >
Encoding:
Text File  |  1991-08-14  |  814 b   |  49 lines

  1. \ Fibonacci sequence using recursion.
  2.  
  3. ANEW TASK-FIBONACCI
  4.  
  5. ASM FIBO   ( n -- fib[n] )
  6.     cmpi    #1,tos
  7.         bgt.s    1$        ; continue recursion?
  8.         move    #1,tos        ; fib(1) = fib(0) = 1
  9.     rts
  10. 1$:    movem.l    d1-d2,-(rp)    ; must be reentrant
  11.     move.l    tos,d1        ; save N in D1
  12.         subq.w  #1,tos        ; calc fib(n-1)
  13.         forth{ ] recurse [ }forth ; jsr fibo
  14.     move.l    tos,d2        ; save fib(n-2) in d2
  15.     move.l    d1,tos
  16.         subq.w  #2,tos        ; calc fib(n-2)
  17.         forth{ ] recurse [ }forth
  18.     add.l    d2,tos        ; add fib(n-1)
  19.     movem.l    (rp)+,d1-d2
  20.     rts
  21. END-CODE
  22.  
  23. : TEST.FIBO  ( -- )
  24.     10 0
  25.     DO i fibo .
  26.     LOOP
  27. ;
  28.  
  29. : CHEAP.FIBO  ( -- , print first 10 fibonaccis )
  30.     1 1 dup .
  31.     9 0
  32.     DO dup . tuck +
  33.     LOOP
  34. ;
  35.  
  36. : FIBO.HI ( N -- fib[n] , high level version )
  37.     dup 1 >
  38.     IF  dup 1- recurse swap 2- recurse +
  39.     ELSE drop 1
  40.     THEN
  41. ;
  42.  
  43.  
  44. : TEST.FIBO.HI  ( -- )
  45.     10 0
  46.     DO i fibo.hi .
  47.     LOOP
  48. ;
  49.